//
//  main.c
//  101. isSymmetric
//
//  Created by edz on 2020/7/11.
//  Copyright © 2020 edz. All rights reserved.
//
/*

 给定一个二叉树，检查它是否是镜像对称的。
 例如，二叉树 [1,2,2,3,4,4,3] 是对称的。

     1
    / \
   2   2
  / \ / \
 3  4 4  3

 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
     1
    / \
   2   2
    \   \
    3    3
 进阶：
 你可以运用递归和迭代两种方法解决这个问题吗？
 */


#include <stdio.h>
#include <stdbool.h>

// Definition for a binary tree node.
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

bool IsSym(struct TreeNode* a,struct TreeNode* b)
{
    if(a == NULL && b == NULL)
        return true;
    if( a == NULL || b == NULL || a->val != b->val )
        return false;
    return  IsSym(a->left, b->right) && IsSym(a->right, b->left);
}

bool isSymmetric(struct TreeNode* root){
    if(root == NULL)
        return true;
    return IsSym(root->left, root->right);
}
